/*
 * F_Clusters.c
 *
 *  Created on: 04/11/2011
 *      Author: utn_so
 */

#include "../../headers/GlobalHeaderPFS.h"

extern uint32_t *fatRegion;

/*-------------------------------------------------------------------------*/
/* Arma una lista de N numeros de clusters sobre el criterio de
 * una misma condicion.
 * Tipos de condiciones: FAT_DANADO, FAT_ULTIMO, FAT_LIBRE.
 */
void buscarClusters(uint32_t condicion,tnodoEntrada *colaFrente,int n){

	int valor=0;
	*colaFrente = NULL;
	tnodoEntrada colaFin = NULL;

	while (valor<=131072 && n>0) {
		if (condicion == fatRegion[valor]) {
			agregarEntradaCola(&*colaFrente,&colaFin,valor);
			n--;
			switch (fatRegion[valor]) {
					case 0x00000000:{

					}
						 /*llenar lista clusters libres*/
					break;
					case 0x00000001:
							;   /*clusters reservados not use*/

						break;

					case 0x0FFFFFF0:
							;		/*Reserved in some contexts or also used*/
						break;
					case 0x0FFFFFF6:
							;		/*reservados no se usan*/
						break;
					case 0x0FFFFFF7:
							;      /*cluster dañado*/
						break;
					case 0x0FFFFFF8:
							;		/*Eof*/
						break;
					}
		}
	 valor++;
	}
}

/*-------------------------------------------------------------------------*/
/* Arma una cadena de numeros de clusters, siguiendo la lista
 * enlazada de la Fat, a partir de un nro de clusters como inicio.
 */
void crearCadenaClusterAPartir(int direccion,tnodoEntrada *lista){

	*lista = NULL;
	tnodoEntrada colaFin = NULL;

				do {
					agregarEntradaCola(&*lista,&colaFin,direccion);
					direccion= fatRegion[direccion];
				} while (direccion!=FAT_ULTIMO && direccion!=0xffffff8);

	}

/*-------------------------------------------------------------------------*/
/**

 */
void vaciarCadenaClusters(tnodoEntrada *cadena){

	tnodoEntrada cadenaAux;
	while((*cadena) != NULL){
		cadenaAux= *cadena;
		*cadena=(*cadena)->sgte;
		free(cadenaAux);
		}

}
